package savet;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import org.openswing.swing.mdi.client.ClientFacade;
import org.openswing.swing.mdi.client.MDIFrame;
import savet.entidades.Lote;
import savet.entidades.Trabalhador;
import savet.gui.TabelasInternalFrame;
import savet.gui.forms.EmentaForm;
import savet.gui.tabelas.Ementario;
import savet.gui.controllers.EmentarioController;
import savet.gui.tabelas.GuiSAVET;
import savet.gui.controllers.GuiSAVETController;
import savet.gui.controllers.TabelaPadraoController;
import savet.gui.tabelas.GuiEdicaoLote;
import savet.gui.tabelas.TabelaPadraoForm;
import savet.util.io.ArquivoUtil;
import savet.util.ListaTrabalhadores;
import savet.util.LoteUtil;
import savet.util.SauditaLog;

/**
 *
 * @author Adisson
 */
public class SAVETFachada implements ClientFacade {

    public void getTabelaPadrao() {
        TabelasInternalFrame tif = new TabelasInternalFrame();
        TabelaPadraoController tabelaPadraoController = new TabelaPadraoController();
        TabelaPadraoForm tabelaPadraoForm = new TabelaPadraoForm(tabelaPadraoController);

        tif.adicionarPainel("Principal", tabelaPadraoForm);

        MDIFrame.add(tif);
    }

    public GuiSAVET getGuiSavet() {
        GuiSAVETController controller = new GuiSAVETController();
        GuiSAVET guiSAVET = new GuiSAVET(controller);
        MDIFrame.add(guiSAVET, true);
        return guiSAVET;
    }

    public void getEmentario() {
        EmentarioController controller = new EmentarioController();
        Ementario ementario = new Ementario(controller);
        MDIFrame.add(ementario);
    }

    public void getEmentaForm() {
        EmentaForm ementario = new EmentaForm();
        MDIFrame.add(ementario);
    }

    public void getNovoLote() {
        GuiEdicaoLote guiSelecao = new GuiEdicaoLote();
        MDIFrame.add(guiSelecao, true);
    }

    public void getSalvarLote(){}

    public void getCarregarLote() {
        try {
            ArquivoUtil.criarArquivoUtilInstance(ArquivoUtil.ARQUIVO_XML);
            LoteUtil loteUtil = LoteUtil.getInstance();

            Lote lote = (Lote) ArquivoUtil.abrirComFileChooser();
            File arquivoLote = ArquivoUtil.getUltimoArquivoAberto();
            
            loteUtil.setLoteAtual(lote);
            loteUtil.setArquivoLote(arquivoLote);

            // chamado para iniciar GuiSelecaoEmpregador
            getNovoLote();
        } catch (IOException ex) {
            SauditaLog.adicionarSevereLog("", ex);
        } catch (ClassNotFoundException ex) {
            SauditaLog.adicionarSevereLog("", ex);
        } catch (NullPointerException ex) {
            SauditaLog.adicionarSevereLog(SAVETFachada.class, ex.getMessage());
        }
    }

    public void getTrabalhadores() {
        JMenuItem item = MDIFrame.getInstance().getMenuItem("trabalhadores");
        List<ActionListener> listeners = Arrays.asList(item.getActionListeners());
        if (!listeners.contains(ctl)) {
            item.addActionListener(ctl);
            ctl.actionPerformed(new ActionEvent(new JButton(), 1, "auto"));
        }
    }
    private ActionListener ctl = new CarregarTrabalhadoresListener();

    private class CarregarTrabalhadoresListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            try {
                Serializable dadosArquivo = ArquivoUtil.abrirComFileChooser();
                List<Trabalhador> lista = (List<Trabalhador>) dadosArquivo;

                ListaTrabalhadores.getInstance().atualizarTrabalhadores(lista);
                GuiSAVET guiSavet = getGuiSavet();
                guiSavet.setTrabalhadores(lista);
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }
}
